<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        //  symbol值是唯一的，用来解决命名冲突问题
        // 值不能与其他啊数据类型进行运算
        // 定义的对象属性不能使用 for...in 循环遍历
        // ，但是可以使用    reflect.ownkeys



        // 创建symbol
        let s = Symbol();//Symbol()
        console.log(s, typeof s);
        let s1 = Symbol('胡歌');
        let s2 = Symbol('胡歌');
        console.log(s1);
        console.log(s1 === s2);//false

        // 创建方式2
        let a = Symbol.for()//Symbol(undefined) 
        console.log(a, typeof a);
        let a1 = Symbol.for('胡歌');
        let a2 = Symbol.for('胡歌');
        console.log(a1 === a2);//true




        // 为了不让覆盖，用symbol就不会让别人写同名属性覆盖自己写的
        let key = {
            name: Symbol('name'),
            age: Symbol('age'),
            tle: Symbol('tle'),
            fu: Symbol('fu')
        }
        let obj = {
            [key.name]: '胡歌',
            [key.age]: 10,
            [key.tle]: 1234232,
            [key.fu]: function () {
                console.log("仙剑奇侠传");
            }
        }
        // 访问对象属性,方法
        console.log(obj);
        console.log(obj[key.name], obj[key.age], obj[key.tle], obj[key.fu]);
        obj[key.fu]()//方法访问

        obj.name = '彭于晏';//添加了一个普通对象属性
        console.log(obj);


        console.log('-- 遍历symbol对象属性 不能使用for...in(只能遍历普通属性)---');
        // 遍历symbol对象属性 不能使用for...in(只能遍历普通属性)
        for (k in obj) {
            console.log(k);//属性名
            console.log(obj[k]);//属性值
        }
        //  普通和symbol属性一起遍历
        Reflect.ownKeys(obj).forEach((itme)=>{
                   console.log(itme,obj[itme]);
        })




        
    </script>


</body>

</html>